home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / cd2pcmt / source.lzh / TNB.H < prev   
Text File  |  1996-03-23  |  27KB  |  886 lines

  1. /*
  2.  * tnb.h for X68k XC Compiler v2.00 Copyright 1993 1994 TNB製作所
  3.  *                              + TNB.L
  4.  *                              + ZMCLIB.L
  5.  */
  6. #include    <IOCSLIB.H>
  7. #include    <DOSLIB.H>
  8. /*
  9. z:\HELP\IOCS_DOC.HLP 1
  10. z:\HELP\DOS_DOC.HLP 1
  11. */
  12. /*    定番    */
  13. #define        UNchar        unsigned char
  14. #define        UNshort        unsigned short
  15. #define        UNint        unsigned int
  16. #define        UNlong        unsigned long
  17. #define        elif        else if
  18. #define        VMODE        0x80000000
  19. /*    インライン関数もどき    */
  20. #define        VADDS(p,x,y)    ( 0xC00000+(p)*0x80000+(x)*2+(y)*1024 )
  21. #define        VADDS_(x,y)    ( (x)*2+(y)*1024 )
  22. #define        ADDS_(x,y)    ( (x)*2+(y)*1024 )
  23. #define        BADDS(p,x,y)    ( 0xEBC000+(p)*0x2000+(x)*2+(y)*0x80 )
  24. #define        BADDS_(x,y)    ( (x)*2+(y)*0x80 )
  25. #define        RR(R)        ( ((R)>> 6) & 0x1F )
  26. #define        GG(G)        ( ((G)>>11) & 0x1F )
  27. #define        BB(B)        ( ((B)>> 1) & 0x1F )
  28. #define        II(I)        ( (I) & 1 )
  29. #define        RGB(R,G,B)    ( ((R)<<6) | ((G)<<11) | ((B)<<1) )
  30. #define        pow2(i)        (1<<(i))
  31. #define        bit(i)        (1<<(i))
  32. #define        nbit(i)        ( 0xFFFFFFFF-(1<<(i)) )
  33. #define        down_for(I,J)    for( I=(J)-1;I>=0;I-- )
  34. #define        B_USER(I)    B_SUPER(I)
  35. #define        B_USER_(I)    {if ( (I)>=0 ) B_SUPER(I);}
  36.  
  37. #ifdef    FORWORD
  38. #define    __PROTO_TYPE
  39. #endif
  40. #ifdef    __STDC__
  41. #define    __PROTO_TYPE
  42. #endif
  43. #ifdef    __PROTO_TYPE
  44. /*------------------------------------------------------*/
  45. /*        STICK関係PROTO            */
  46. /*------------------------------------------------------*/
  47. /*--データ引--*/
  48. /*::ノーマル::*/
  49. long    JOYSTICK1(void);    /*[0BA0RLDU] */
  50. long    JOYSTICK2(void);
  51. /*::マウス::*/
  52. long    MSXMOUSE(long po);
  53.         /* MSXマウス専用
  54.           挿されていない場合は 0x0011が返るがこれでの識別は不可能
  55.             po=0;JOY STICK PORT 1
  56.              !=0;JOY STICK PORT 2
  57.          - - - -  - - [R][L]:[ X 8bit ]:[ Y 8bit  ]
  58.         */
  59. long    SEGAMOUSE(void);
  60.         /* JOY PROT1 マウス
  61.           戻り値が-1の場合 タップ端末マウス情報をSEGAMOUSES[x] に格納
  62.            戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
  63.            0の場合 セガマウス(タップ)が接続されていない。
  64.             (スティック情報は格納されない)
  65.         */
  66. struct    SEGAMOUSEPTR {
  67.     unsigned char    type;
  68.     unsigned char    bot;    /*- - [R][L]*/
  69.     char    xm,ym;    /*X,Y移動値*/
  70. };
  71. extern    struct    SEGAMOUSEPTR SEGAMOUSES[4];
  72.             /* SEGAMOUSES は SEGATAPS と同じアドレス!! */
  73. /*::スティック::*/
  74. long    MDJOYSTICK(long po);
  75.         /* メガドラパッド用 68用のものチェック可能
  76.           JOYSTICK?() 同等品
  77.             po=0;JOY STICK PORT 1
  78.              !=0;JOY STICK PORT 2
  79.         */
  80. long    EXJOYSTICK(long po);
  81.         /* ノーマル、リブラブ、CPMD
  82.           JOYSTICK?() 同等品
  83.             po=0;JOY STICK PORT 1
  84.              !=0;JOY STICK PORT 2
  85.         */
  86. long    CYBERSTICK(void);
  87.         /* 戻り値がマイナスの場合 CYBERS に JOY PORT 1 の サイバー
  88.           スティックの情報を読み込みます。
  89.           0の場合(Analog)接続されていない。
  90.         */
  91. struct CYBERPTR {
  92.     unsigned short    bot;    /* 0 0 0 0 [A][B][A][B][A][B][C][D][E1][E2][Sta][SeL]*/
  93.     unsigned char    ud1;
  94.     unsigned char    rl1;
  95.     unsigned char    ud2;
  96.     unsigned char    rl2;
  97. };
  98. extern struct CYBERPTR CYBERS;
  99. /*::マルチタップ::*/
  100. long    SEGATAP(long mo);
  101. long    SEGATAP_(long mo);
  102.         /* セがタップ専用
  103.           戻り値が-1の場合SEGATAPS[x]に情報を格納します
  104.            戻り値が-2の場合 セガマウス接続、情報をSEGAMOUSES[0]に格納
  105.           以外の値はMDJOYSTICK(0)と同。
  106.             mo=0;マウスデータは無視する。type==2の時でもデータは無効
  107.              !=0;マウスデータの収納。type==2のデータは有効(JOYMOUSEPTR[])
  108.               SEGATAP_()はタップとの通信中、他の割り込みを禁止しない
  109.         */
  110. struct    SEGATAPPTR {
  111.     unsigned char    type;    /*pad;0|1      mouse;2 */
  112.     unsigned char    bot;    /*pad;未使用   mouse;- - [R][L]*/
  113.     unsigned short    data;    /*pad;型による mouse;[X 8bit][Y 8bit]*/
  114. };
  115. extern    struct    SEGATAPPTR SEGATAPS[4];
  116.  
  117.  
  118.         /*    JOYSTICK?() MDJOYSTICK() SEGATAPS[?].dataの値
  119.                 各bit 押されていれば 1になる
  120.                         このビットに注目
  121.             ↓       ↓             ↓         ↓ 
  122.         ◎68パット
  123.             0  0   0  0   0  0   0 0 : 0 [B] [A] 0 [R][L][D][U]
  124.           ( 0 [B] [A] 0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U] )
  125.         ◎6ボタンパット
  126.           [st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
  127.         ◎3ボタンパット
  128.           [st][C][B][A]  0  0  0  0  : 1 [B][c] 1 [R][L][D][U]
  129.         ◎マジカルパット
  130.                 1 [B] [D] 0 [RT][LT] 1 1 : 0 [A] [C] 0 [R][L][D][U]
  131.         ◎(EX)リブラブパット
  132.             0  0   0  0 [R][L][D][U] : 0 [B] [A] 0 [R][L][D][U]
  133.         ◎(EX)CPSF-MD パット
  134.             0 [st][C] 0[md][X][Y][Z] : 0 [B] [A] 0 [R][L][D][U]
  135.         ◎(EX)CPSF-PC スティック
  136.             0 [st][L] 0[sl][X][Y][R] : 0 [B] [A] 0 [R][L][D][U]
  137.         ◎(EX)CyberStick-DigtalMode
  138.             0 [E2][E1]0[D][C][S][S]: 0 [B] [A] 0 [R][L][D][U]
  139.         ◎SEGA-TAPパット
  140.           [st][C][B][A][md][X][Y][Z] : 1 [B][c] 0 [R][L][D][U]
  141.           [st][C][B][A]  0  0  0  0  : 1 [B][c] 1 [R][L][D][U]
  142.             SEGATAPPTR.type= 0 ; 3ボタン
  143.                      1 ; 6ボタン
  144.                      2 ; マウス
  145.                     15 ; 非接続
  146.         */
  147. /*--データチェック--*/
  148. /*ノーマル専用(含入力)*/
  149. long    STICK1(void);
  150. long    STRIG1_A(void);
  151. long    STRIG1_B(void);
  152. long    STRIG1_RUN(void);
  153. long    STRIG1_SELECT(void);
  154. long    STICK2(void);
  155. long    STRIG2_A(void);
  156. long    STRIG2_B(void);
  157. long    STRIG2_RUN(void);
  158. long    STRIG2_SELECT(void);
  159. /*多種対応*/
  160. long    STICKD(long d);
  161.     /*    向きを数値で返す
  162.         d=データ
  163.     */
  164. #define    STRIGD_A(d)        ((d)&0x0020)
  165. #define    STRIGD_B(d)        ((d)&0x0040)
  166. #define    STRIGD_AA(d)        ((d)&0x1000)
  167. #define    STRIGD_BB(d)        ((d)&0x2000)
  168. #define    STRIGD_CC(d)        ((d)&0x4000)
  169. #define    STRIGD_XX(d)        ((d)&0x0400)
  170. #define    STRIGD_YY(d)        ((d)&0x0200)
  171. #define    STRIGD_ZZ(d)        ((d)&0x0100)
  172. #define    STRIGD_RUN_(d)        ((d)&0x8000)
  173. #define    STRIGD_SELECT_(d)    ((d)&0x0800)
  174. long    STRIGD_RUN(long d);        /*Towns [Run] 対応*/
  175. long    STRIGD_SELECT(long d);        /*Towns [Sel] 対応*/
  176.  
  177. /*マルチタップ専用*/
  178. #define    JOYSTICKM(n)     ( (SEGATAPS[n].type<=1)?          SEGATAPS[n].data :0 )
  179. #define    STRIGM_A(n)      ( (SEGATAPS[n].type<=1)?STRIGD_A( SEGATAPS[n].data):0 )
  180. #define    STRIGM_B(n)      ( (SEGATAPS[n].type<=1)?STRIGD_B( SEGATAPS[n].data):0 )
  181. #define    STRIGM_AA(n)     ( (SEGATAPS[n].type<=1)?STRIGD_AA(SEGATAPS[n].data):0 )
  182. #define    STRIGM_BB(n)     ( (SEGATAPS[n].type<=1)?STRIGD_BB(SEGATAPS[n].data):0 )
  183. #define    STRIGM_CC(n)     ( (SEGATAPS[n].type<=1)?STRIGD_CC(SEGATAPS[n].data):0 )
  184. #define    STRIGM_XX(n)     ( (SEGATAPS[n].type<=1)?STRIGD_XX(SEGATAPS[n].data):0 )
  185. #define    STRIGM_YY(n)     ( (SEGATAPS[n].type<=1)?STRIGD_YY(SEGATAPS[n].data):0 )
  186. #define    STRIGM_ZZ(n)     ( (SEGATAPS[n].type<=1)?STRIGD_ZZ(SEGATAPS[n].data):0 )
  187. #define    STRIGM_RUN(n)    ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x8000):0 )
  188. #define    STRIGM_SELECT(n) ( (SEGATAPS[n].type<=1)?(SEGATAPS[n].data & 0x0800):0 )
  189.  
  190. /*------------------------------------------------------*/
  191. /*                            */
  192. /*        SPRITE関係PROTO            */
  193. /*                            */
  194. /*------------------------------------------------------*/
  195. #define    SP_ON2_S() (*(unsigned short*)0xEB0808|=0x0200)
  196. #define    SP_OFF2_S() (*(unsigned short*)0xEB0808&=0xFDFF)
  197. #define    SP_ON_S() (*(unsigned short*)0xE82600|=0x0040)
  198. #define    SP_OFF_S() (*(unsigned short*)0xE82600&=0xFFBF)
  199. long    SP_COLOR(long pc,long c,long pb);
  200. long    SP_COLOR_S(long pc,long c,long pb);
  201.         /* スプライトカラーチェンジ
  202.             pc=カラーコード(0-15)
  203.             c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
  204.             pd=カラーブロック(0-15)
  205.            or
  206.             pc=カラーコード(0-255)
  207.             c=カラーナンバー(0-65535) c=-1の場合変更せず現在値を戻す
  208.             pd=0 (固定)
  209.         */
  210. void    SP_DEFCH(long cd,void *,long no);
  211. void    SP_DEFCH_S(long cd,void *,long no);/*SUPER*/
  212.         /* 
  213.  
  214.  
  215.         */
  216. void    SP_MOVE(long n,long x,long y);
  217. void    SP_MOVE_S(long n,long x,long y);
  218.         /* スプライトプレーン移動のみ
  219.             n=プレーンナンバー    x,y=座標
  220.         */
  221. void    BGSET(long BA,long p);
  222. #define    BGSET_S(BA,p)    ( *(unsigned short*)(BA)=(p) )
  223.         /* BGへの書き込み
  224.             BA=BADDS(p,x,y)での指定
  225.             p=    bit 15        垂直反転
  226.                 bit 14        水平反転
  227.                 bit 8,9,10,11    パレット
  228.                 bit 0-7        0-255 キャラナンバー
  229.         */
  230. void    BGTEXTST0(long x,long y,long p);
  231. void    BGTEXTST0_S(long x,long y,long p);
  232. void    BGTEXTST1(long x,long y,long p);
  233. void    BGTEXTST1_S(long x,long y,long p);
  234.         /* BGへの書き込み
  235.             x,y=座標 BG1へはy+=32で可能
  236.             p=    bit 15        垂直反転
  237.                 bit 14        水平反転
  238.                 bit 8,9,10,11    パレット
  239.                 bit 0-7        0-255 キャラナンバー
  240.         */
  241. /*------------------------------------------------------*/
  242. /*        GRAPHIC関係PROTO            */
  243. /*------------------------------------------------------*/
  244. #define    GG_ON_S() (*(unsigned short*)0xE82600|=0x000F)
  245. #define    GG_OFF_S() (*(unsigned short*)0xE82600&=0xFFF0)
  246. void    GGPRIORITY(long GP0,long GP1,long GP2,long GP3);
  247.         /* Graphicの4つのプレーンの優先順位を変える
  248.             GP0ーGP3=0から3で、0が一番上
  249.             defaultでは(0,1,2,3)。同じ数字は禁止。
  250.             256色モードではGP0+GP1がペアでページ0
  251.             GP2+GP3がペアでページ1をきめる
  252.         */
  253. void    GGFILL(long VA,long lx,long ly,long c);
  254. void    GGFILL_S(long VA,long lx,long ly,long c);/*SUPER*/
  255. void    GGFILL8(long VA,long lx8,long ly,long c);
  256. void    GGFILL8_S(long VA,long lx8,long ly,long c);/*SUPER*/
  257.         /* GraphicにBOX FILLを書く(全画面対応)
  258.             VA=VADDS(p,x,y)で左上座標
  259.             lx,ly=BOXの辺の長さ
  260.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  261.             c=カラー
  262.         */
  263. void    GGPSET(long VA,long c);
  264. #define    GGPSET_S(VA,c) ( *(unsigned short*)(VA)=(c) )
  265.         /* Graphicに点を打つ(全画面対応)
  266.             VA=VADDS(p,x,y)で座標
  267.             c=カラー
  268.         */
  269. long    GGPALET(long n,long c);
  270. long    GGPALET_S(long n,long c);
  271.         /* パレットチェンジ
  272.             n=パレットコード(画面モードによる)
  273.             c=カラーコード(0-65535)
  274.         */
  275. void    GGMOSAIC(long VA,long lx,long ly,long m);
  276.         /* Graphicの指定範囲内のモザイク処理をする(全画面対応)
  277.             VA=VADDS(p,x,y)で左上座標
  278.             lx,ly=BOXの辺の長さ
  279.             m=モザイクモード
  280.         */
  281. long    GGPOINT(long VA);
  282. #define    GGPOINT_S(VA) ( *(unsigned short*)(VA) )
  283.         /* Graphicの色を返す(全画面対応)
  284.             VA=VADDS(p,x,y)で座標
  285.         */
  286. void    GGGET(long VA,long lx,long ly,void *bu);
  287. void    GGGET_S(long VA,long lx,long ly,void *bu);
  288. void    GGPUT(long VA,long lx,long ly,void *bu);
  289. void    GGPUT_S(long VA,long lx,long ly,void *bu);
  290.         /* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
  291.             VA=VADDS(p,x,y)で左上座標
  292.             lx=横方向のBOXの辺の長さ
  293.             ly=たて方向BOXの辺の長さ
  294.             bu=パッファホインタ。バッファーは要(lx×ly)byte
  295.                 (DMAC使用)
  296.         */
  297. void    GGGET8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
  298. void    GGPUT8(long VA,long lx8,long ly,void *bu);/*xは8Dot単位*/
  299.         /* Graphicの指定範囲のゲットプット。ただし、256色モード以下用
  300.             VA=VADDS(p,x,y)で左上座標
  301.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  302.             ly=たて方向BOXの辺の長さ
  303.             bu=パッファホインタ。バッファーは要(lx8×8×ly)byte
  304.                 (非DMAC使用:ClockUp機に有効!?)
  305.         */
  306. void    GGCOPY(long VA1,long lx,long ly,long VA2);
  307. void    GGCOPY_S(long VA1,long lx,long ly,long VA2);
  308.         /* Graphicの指定範囲のコピー
  309.             VA1=VADDS(p,x,y)で左上座標 sous
  310.             VA2=VADDS(p,x,y)で左上座標 dest
  311.             lx=横方向のBOXの辺の長さ
  312.             ly=たて方向BOXの辺の長さ
  313.         */
  314. #define    GGCOPY8(VA1,lx8,ly,VA2) GGCOPY(VA1,(lx8)*8,ly,VA2)
  315. #define    GGCOPY8_S(VA1,lx8,ly,VA2) GGCOPY_S(VA1,(lx8)*8,ly,VA2)
  316.         /* Graphicの指定範囲のコピー
  317.             VA1=VADDS(p,x,y)で左上座標 sous
  318.             VA2=VADDS(p,x,y)で左上座標 dest
  319.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  320.             ly=たて方向BOXの辺の長さ
  321.         */
  322. void    GGSCRCLS(long m);
  323.         /* Graphicの消去
  324.             m=CLS Mode Nunber
  325.                 0,1 ; Page 0,1の高速クリヤー
  326.                 2,3 ; Page 0,1の変則クリヤー
  327.                 4以上 禁止、動作は保証されない
  328.         */
  329. void    GGSCRCLS2(long VA,long lx8,long ly);
  330.         /* Graphicの消去
  331.             VA=VADDS(p,x,y)で左上座標
  332.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  333.             ly=たて方向BOXの辺の長さ
  334.         */
  335. void    GGCHCOLOR8(long VA,long lx8,long ly,long c1,long c2);
  336.         /* Graphicの指定範囲のカラーチェンジ
  337.             VA1=VADDS(p,x,y)で左上座標 sous
  338.             lx8=横方向のBOXの辺の長さ、ただし実際の1/8で指定。
  339.             c1,c2=c1のカラーナンバーをc2のカラーナンバーへ
  340.         */
  341. /*------------------------------------------------------*/
  342. /*        (GRAPHIC+SPRITE)/2 関係PROTO        */
  343. /*------------------------------------------------------*/
  344. extern volatile void *GGSP8_BUFF;
  345.         /* GGSP8()用データの先頭アドレス
  346.             defaultでは0xEB8000(SPRITE DATA ADDS)になっている
  347.         */
  348. void    GGSP8(long VA,long c);
  349. void    GGSP8_S(long VA,long c);
  350.         /* GraphicにBGのように表示
  351.             VA = VADDS(p,x,y)で座標指定
  352.             c=     bit 15        垂直反転
  353.                  bit 14        水平反転
  354.                 (bit 12,13    0-1024 キャラナンバー)
  355.                  bit 8,9,10,11    パレット
  356.                  bit 0-7    0-255 キャラナンバー
  357.         */
  358. extern volatile void *GGSP16_BUFF;
  359.         /* GGSP16()用データの先頭アドレス
  360.             defaultでは0xEB8000(SPRITE DATA ADDS)になっている
  361.         */
  362. void    GGSP16(long VA,long c);
  363. void    GGSP16_S(long VA,long c);
  364.         /* GraphicにBGのように表示
  365.             VA = VADDS(p,x,y)で座標指定
  366.             c=    bit 15        垂直反転
  367.                 bit 14        水平反転
  368.                 bit 8,9,10,11    パレット
  369.                 bit 0-7        0-255 キャラナンバー
  370.         */
  371. /*+*/
  372. extern volatile void *GGPCG8_BUFF;
  373. void    GGPCG8(long VA,long c);
  374. void    GGPCG8_S(long VA,long c);
  375. extern volatile void *GGPCG16_BUFF;
  376. void    GGPCG16(long VA,long c);
  377. void    GGPCG16_S(long VA,long c);
  378. /*------------------------------------------------------*/
  379. /*        TEXT関係PROTO            */
  380. /*------------------------------------------------------*/
  381. #define    TX_ON_S() (*(unsigned short*)0xE82600|=0x0020)
  382. #define    TX_OFF_S() (*(unsigned short*)0xE82600&=0xFFDF)
  383. void    TXSCRCLS();
  384. /*------------------------------------------------------*/
  385. /*        FONT関係PROTO            */
  386. /*------------------------------------------------------*/
  387. /*struct    FNTBUF    {
  388.     short    xl,yl;
  389.     unsigned char    buffer[72];
  390. };*/
  391. void    FNTGET8(long KC,struct    FNTBUF *AD);
  392.         /* 8ドット漢字パターンを指定アドレスに書き込む
  393.             KC=漢字コード
  394.             AD=データの書き込まれるアドレス
  395.                 半角のみ 0.w,2.w = Xsize,Ysize(4,8)  全12byte
  396.                 全角のみ 0.w,2.w = Xsize,Ysize(8,8)  全12byte
  397.         */
  398.  
  399. extern volatile void *FNT12_BUFF;
  400.         /*FNTGET12用 12dotFontData:要町等のの先頭アドレス
  401.                0の場合,FNTGET12Tが呼び出される
  402.                 サイズ 215136byte
  403.         */
  404. void    FNTGET12(long KC,struct    FNTBUF *AD);
  405.         /* 12ドット漢字パターンを指定アドレスに書き込む
  406.             KC=漢字コード
  407.             AD=データの書き込まれるアドレス
  408.                 半角のみ 0.w,2.w = Xsize,Ysize(6,12)   全16byte
  409.                 全角のみ 0.w,2.w = Xsize,Ysize(12,12)  全28byte
  410.             FNT12_BUFFが参照される
  411.         */
  412. void    FNTGET12T(long KC,struct    FNTBUF *AD);
  413.         /* 12ドット漢字パターンを指定アドレスに書き込む
  414.             24dotfontをコンバート、全角のみ。半角コードは保証されない
  415.             KC=漢字コード
  416.             AD=データの書き込まれるアドレス
  417.                 全角のみ 0.w,2.w = Xsize,Ysize   全28byte
  418.         */
  419. #define    FNTGET16(A,B) FNTGET(8,A,B)
  420. #define    FNTGET24(A,B) FNTGET(12,A,B)
  421.  
  422. extern volatile long GGCHAR_COLOR1;
  423. extern volatile long GGCHAR_COLOR2;
  424.         /*GGCHAR用カラーコード指定
  425.             GGCHAR_COLOR1=文字カラー1(範囲は画面モードによる)
  426.             GGCHAR_COLOR2=文字カラー2
  427.         */
  428. void    GGCHAR(long VA,struct FNTBUF *AD);
  429. void    GGCHAR_S(long VA,struct FNTBUF *AD);/*SUPER*/
  430.         /* GRAPHICにCHAR.表示(全画面,24Dotまで対応)
  431.             VA=VADDS(p,x,y)での座標指定
  432.             AD=FNTGET12等でパターンをセットしたアドレス
  433.             GGCHAR_COLOR1=文字カラー
  434.         */
  435. void    GGCHARB(long VA,struct FNTBUF *AD);
  436. void    GGCHARB_S(long VA,struct FNTBUF *AD);/*SUPER*/
  437.         /* GRAPHICにCHAR.表示(全画面,24Dotまで対応)
  438.             VA=VADDS(p,x,y)での座標指定
  439.             AD=FNTGET12等でパターンをセットしたアドレス
  440.             GGCHAR_COLOR1=文字カラー
  441.             GGCHAR_COLOR2=背景文字カラー
  442.         */
  443. extern volatile void *FNT8_BUFF;
  444.         /*GGCHAR8/B用 8dotCharData
  445.             指定無い場合、GCROMの物を使用
  446.                 (1*8)*文字数 byte
  447.             moji_s2d.xの出力するデータを使用
  448.         */
  449. void    GGCHAR8(long VA,long CC);
  450. void    GGCHAR8_S(long VA,long CC);
  451.         /* GRAPHICに8DotCHAR.表示(全画面対応)
  452.             VA=VADDS(p,x,y)での座標指定
  453.             CC=キャラクターコード
  454.         */
  455. void    GGCHAR8B(long VA,long CC);
  456. void    GGCHAR8B_S(long VA,long CC);
  457.         /* GGCHAR8()同等品
  458.           GGCHAR_COLOR1:が文字、GGCHAR_COLOR2が背景の色でべた書きする
  459.             VA=VADDS(p,x,y)での座標指定
  460.             CC=キャラクターコード
  461.         */
  462.  
  463. /*------------------------------------------------------*/
  464. /*        TIMING関係PROTO            */
  465. /*------------------------------------------------------*/
  466. void    CRTVDISP(void);
  467. #define    CRTVDISP_S()                    \
  468. asm("@@:        btst.b        #4,$00e88001    \n\
  469.             beq        @b        \n\
  470. @@:            btst.b        #4,$00e88001    \n\
  471.             bne        @b        ");
  472.         /* CRTV同期タイミングを計る    */
  473.  
  474. /*TIMER-D*/
  475. void    timD_start(void);
  476. void    timD_end(void);
  477. void    timD_set(long);
  478. void    timD_weit(void);
  479. long    timD_count(void);
  480. long    timD_countD(void);
  481.         /* 1m秒
  482.  
  483.         */
  484. /*ONTIME*/
  485. void    ONtim_set(long);
  486. void    ONtim_weit(void);
  487. long    ONtim_count(void);
  488.         /* 1/100秒
  489.  
  490.         */
  491. #define    ONtim_countD()    ONTIME()
  492. long    ONtim_margin( long ot,long ma );
  493.         /* ma/100sを過ぎていたら1を返す
  494.             ot=前回conutDで拾った値
  495.             ma= 1/100s
  496.           ex)    i=ONtime_countD();
  497.                 if ( ONtim_margin( i,500 ) ){
  498.                     i=ONtim_countD();
  499.                     いろいろ;
  500.                 }
  501.         */
  502. /*要PROCESS=*/
  503. void    tim_set(long);
  504. void    tim_weit(void);
  505. long    tim_count(void);
  506. long    tim_countD(void);
  507. #define    tim_countD()    TIME_PR()
  508.         /* 1m秒
  509.  
  510.         */
  511. /*------------------------------------------------------*/
  512. /*        CALC関係 PROTO            */
  513. /*------------------------------------------------------*/
  514. long    isqrt( long r );
  515.         /* 整数平方根
  516.             戻り値=(long)( √r )
  517.         */
  518. #ifdef __GNUC__
  519.  
  520. #define    MULU(o1,o2) ( (unsigned short)(o1)*(unsigned short)(o2) )
  521. #define    MULS(o1,o2) ( (short)(o1)*(short)(o2) )
  522. //static inline int DIVU(long o1,long o2);
  523. //static inline int DIVS(long o1,long o2);
  524. //static inline int MODU(long o1,long o2);
  525. //static inline int MODS(long o1,long o2);
  526.  
  527. #else
  528.  
  529. int    MULU(long o1,long o2);
  530. int    MULS(long o1,long o2);
  531. int    DIVU(long o1,long o2);
  532. int    DIVS(long o1,long o2);
  533. int    MODU(long o1,long o2);
  534. int    MODS(long o1,long o2);
  535.  
  536. #endif
  537.  
  538. /*------------------------------------------------------*/
  539. /*        ETC PROTO                */
  540. /*------------------------------------------------------*/
  541. /*static inline int ABORT_DISP();*/
  542. long    CHILD(void *st);
  543. /*long    child(void *st);*/
  544.  
  545. void    PRIORITY(long SP,long TX,long GG);
  546. void    scr_prior(long,long,long);/*旧書式*/
  547.         /* スプライト、テキスト、グラフィックの優先順位を変える
  548.             SP=スプライト画面
  549.             TX=テキスト画面
  550.             GG=グラフィック画面
  551.                 0から2で、0が一番上
  552.                 defaultでは(0,1,2)。同じ数字は禁止(Err CHKはしてません)。
  553.         */
  554. void    PRTK_OFF(void);
  555. void    PRTK_RECOVER(void);
  556.         /* COPY KEY キャンセル
  557.            COPY KEY 復活
  558.         */
  559. void    INTPT_OFF(void);
  560.         /* INTERRUPTswでの割り込みを禁止*/
  561. long    INTPT_CHK(void);
  562.         /* INTPT_OFF()実行後、ボタンが押されていたら1を返す
  563.             この関数がコールされたら、フラグはクリアされる
  564.         */
  565. void    INTPT_RECOVER(void);
  566.         /* もとに戻す */
  567.  
  568. void    qsort_w(void *, long, long (*)(const void *, const void *));
  569.         /* qsort()の配列要素サイズが2に固定されているもの*/
  570.  
  571.  
  572. #else
  573.  
  574. long    SP_COLOR();
  575. void    SP_DEFCH();
  576. void    SP_DEFCH_S();/*SUPER*/
  577. void    SP_REGST_MV();
  578.  
  579. void    GGFILL();
  580. void    GGFILL_S();/*SUPER*/
  581. void    GGPSET();
  582. void    GGPSET_S();
  583. long    GGPALET();
  584. void    GGMOSAIC();
  585.  
  586. void    GGGET8();/*xは8Dot単位*/
  587. void    GGPUT8();/*xは8Dot単位*/
  588. void    GGCOPY();
  589. void    GGCOPY_S();/*SUPER*/
  590. void    GGSCRCLS();
  591. void    GGSCRCLS2();
  592. void    GGCHCOLOR8();
  593.  
  594. void    CRTVDISP();
  595. void    CRTVDISP_S();
  596.  
  597. long    STICK1(void);
  598. long    STRIG1_A(void);
  599. long    STRIG1_B(void);
  600. long    STRIG1_RUN(void);
  601. long    STRIG1_SELECT(void);
  602. long    JOYSTICK1(void);    /*[-BA-RLDU] *
  603. long    STICK2(void);
  604. long    STRIG2_A(void);
  605. long    STRIG2_B(void);
  606. long    STRIG2_RUN(void);
  607. long    STRIG2_SELECT(void);
  608. long    JOYSTICK2(void);
  609.  
  610. /*要PROCESS=*/
  611. void    tim_set();
  612. void    tim_weit();
  613. long    tim_count();
  614.  
  615. /*TIMER-D*/
  616. void    timD_start();
  617. void    timD_end();
  618. void    timD_set();
  619. void    timD_weit();
  620. long    timD_count();
  621.  
  622. void    DRAWMODE();
  623. void    FNTGET12();
  624.  
  625. void    PRTK_OFF();
  626. void    PRTK_RECOVER();
  627.  
  628. void    INTPT_OFF();
  629. long    INTPT_CHK();
  630. void    INTPT_RECOVER();
  631.  
  632.  
  633. #endif
  634.  
  635.  
  636.  
  637. /*-----------------ZMCLIB---------------*/
  638.  
  639.  
  640.  
  641. struct    ZMreturn {
  642.     long    D0;
  643.     long    A0;
  644. };
  645. struct    ZMplaytmp {
  646.     unsigned long    d2;
  647.     unsigned long    d3;
  648.     unsigned long    d4;
  649. };
  650.  
  651. #ifdef    __PROTO_TYPE
  652.  
  653. long    Zm_drvchk( void );    /*-1:常駐 0:なし*/
  654. void    Zm_init( void );
  655. long    Zm_alloc( long,long );
  656. long    Zm_assign( long,long );
  657. long    Zm_vget( long,void * );
  658. long    Zm_vset( long,void * );
  659. long    Zm_tempo( long );
  660. void    Zm_tempo2( struct ZMreturn * );
  661. long    Zm_trk( long,long );
  662. void    Zm_trk_a( struct ZMreturn * );
  663. long    Zm_free( long );
  664. long    Zm_play( struct ZMplaytmp * );
  665. unsigned long    m_stat( unsigned long );
  666. long    Zm_stop( struct ZMplaytmp * );
  667. long    Zm_cont( struct ZMplaytmp * );
  668. long    Zm_atoi( long );
  669. void    Zinit_all( void );
  670. void    Zinit_stop( void );
  671. long    Zadpcm_read( long,short,short,unsigned short,short );
  672. long    Zplay_cnv_data( long,void * );
  673. void    Zse_play( long,void * );
  674. void    Zse_adpcm1( void *,long,short,short );
  675. void    Zse_adpcm2( long,short,short );
  676. void    Zset_ch_mode( long );
  677. void    Zcalc_total( long );
  678. void    Zfade_out( long );
  679. long    Zm_vset2( long,void * );
  680. long    Zblock_adpcm_data( void * );
  681. void    Zget_trk_tbl( struct ZMreturn * );
  682. long    Zget_timer_mode( void );
  683. void    Zset_fm_master_vol( long );
  684. void    Zset_timer_value( long );
  685. void    Zjump_active( long );
  686. void    Zset_mclk( long );
  687. /*Zset_loop_time.s    1:*/
  688. /*Zget_play_work.s    1:*/
  689. /*Zrelease_support.s    1:*/
  690.  
  691. #undef    __PROTO_TYPE
  692. #else
  693.  
  694. void    Zm_init();
  695. long    Zm_alloc();
  696. long    Zm_assign();
  697. long    Zm_vget();
  698. long    Zm_vset();
  699. long    Zm_tempo();
  700. void    Zm_tempo2();
  701. long    Zm_trk();
  702. void    Zm_trk_a()
  703. long    Zm_free();
  704. long    Zm_play();
  705. unsigned long    m_stat();
  706. long    Zm_stop();
  707. long    Zm_cont();
  708. long    Zm_atoi();
  709. void    Zinit_all();
  710. void    Zinit_stop();
  711. long    Zadpcm_read();
  712. long    Zplay_cnv_data();
  713. void    Zse_play();
  714. void    Zse_adpcm1();
  715. void    Zse_adpcm2();
  716. void    Zset_ch_mode();
  717. void    Zcalc_total();
  718. void    Zfade_out();
  719. long    Zm_vset2();
  720. long    Zblock_adpcm_data();
  721. void    Zget_trk_tbl();
  722. long    Zget_timer_mode();
  723. void    Zset_fm_master_vol();
  724. void    Zset_timer_value();
  725. void    Zjump_active();
  726. void    Zset_mclk();
  727.  
  728. #endif
  729. /*-----------------ZMCLIB---------------*/
  730.  
  731. #ifdef __GNUC__
  732.  
  733. /*        インラインマクロ定義        */
  734.  
  735. /*IOCS*/
  736. #define    BITSNS(gr)                        \
  737.     ({register long    _d0 asm("d0");                \
  738.     register long    _d1 asm("d1");                \
  739.     _d0=0x04;                        \
  740.     _d1=(gr);                        \
  741.     asm("trap #15"                        \
  742.         :"=d"(_d0)                    \
  743.         :"0"(_d0),"d"(_d1)                \
  744.         :"d0","d1");                    \
  745.     _d0;                            \
  746.     })
  747. #define    MS_CURGT()                        \
  748.     ({register long    _d0 asm("d0");                \
  749.     _d0=0x75;                        \
  750.     asm("trap #15":"=d"(_d0):"0"(_d0):"d0");        \
  751.     _d0;                            \
  752.     })
  753. #define    MS_GETDT()                        \
  754.     ({register long    _d0 asm("d0");                \
  755.     _d0=0x74;                        \
  756.     asm("trap #15":"=d"(_d0):"0"(_d0):"d0");        \
  757.     _d0;                            \
  758.     })
  759.  
  760. /*アクセスランプを反転する*/
  761. #define    TIMER_LED()                        \
  762.     asm("    bset    #0,$00e8a01b                \
  763.         eori.b    #%0000_0111,$00e8a001            \
  764.     ");
  765.  
  766. /* 文字列操作マクロ */
  767. #define strcpy_(DES,SRC)            \
  768. do {    char *_d = (char *)(DES);    \
  769.     char *_s = (char *)(SRC);    \
  770.     while (*_d ++ = *_s ++);    \
  771. } while (0)
  772. #define strcat_(SR0,SR1)            \
  773. do {    char *_d = (char *)(SR0);    \
  774.     char *_s = (char *)(SR1);    \
  775.     while (*_d++ );            \
  776.     _d--;                \
  777.     while (*_d ++ = *_s ++);    \
  778. } while (0)
  779. #define strlen_(SR)            \
  780. ({ char *_p = (SR);long _l = 0;        \
  781.     while (*_p ++) _l++;        \
  782.     (_l-1);                \
  783. })
  784.  
  785. #endif
  786.  
  787. /*    メモ    */
  788. /*
  789. -----------------------------------------------------
  790.         CMP    x,y
  791.     符号なし        符号あり
  792.  
  793. y > x    HI (High)        GT (greater Than)
  794. y >= x    CC (Carry Clear)    GE (Greater Equal)
  795. y = x    EQ (Equal)        EQ (Equal)
  796. y != x    NE (Not Equal)        NE (Not Equal)
  797. y < x    CS (Carry Set)        LT (Less Than)
  798. y <= x    LS (Lower or Same)    LE (Less or Equal)
  799.  
  800.         PL (Plus)        MI (Minus)
  801.         VC (Overflow Clear)    VS (Overflow Set
  802.         F  (always False)    T  (always True)
  803. -----------------------------------------------------
  804.     screen(s,j,r,g)
  805.         s=    0 : 256×256
  806.             1 : 512×512
  807.             2 : 768×512
  808.         j=    0 : 1024×1024 16color Page0
  809.             1 : 512×512 16color Page0-3
  810.             2 : 512×512 256color Page0,1
  811.             3 : 512×512 65536color Page0
  812.         r=    0 : LowRes
  813.             1 : HighRes
  814.         g=    0 : Graphic Off
  815.             1 : Graphic On
  816. -----------------------------------------------------
  817.     Video Controler R1 $E82500
  818.  
  819.    FE    DC    BA    98    76    54    32    10
  820. ┌──┬──┬──┬──┰──┬──┬──┬──┐
  821. │'00'│ SP │ TX │ GG ┃ GP3│ GP2│ GP1│ GP0│
  822. └──┴──┴──┴──┸──┴──┴──┴──┘
  823.  
  824. SP    スプライト+BG
  825. TX    テキスト        0-2で0が一番上に
  826. GG    全グラフィック
  827.  
  828. GP?    各グラフィックプレーン    0-3で0が一番上に
  829. -----------------------------------------------------
  830.     Video Controler R2 $E82600
  831.  
  832.    15    14    13    12    11    10     9     8
  833. ┌──┬──┬──┬──┰──┬──┬──┬──┰
  834. │ YS │ AH │ VHT│EXON┃ H/P│ B/P│ G/G│ G/T┃
  835. └──┴──┴──┴──┸──┴──┴──┴──┸
  836. YS    0; ノーマル        1;スーパーインポーズ時でもVideo画像無し
  837. AH    0; ノーマル        1; GG+TextPalet0
  838. VHT    0; ノーマル        1; GG+Video画像
  839. EXON    0; ノーマル        1; H/P 有効
  840. H/P    0; 特殊プライオリティ    1; 半透明  mode
  841. B/P    0; SHARP 予約        1; H/P 領域指定に最下BIT
  842. G/G    0; ノーマル        1; GG0とGG1の半透明
  843. G/T    0; ノーマル        1; GGと下位スクリーンの半透明
  844.  
  845.         7     6     5     4     3     2     1     0
  846.     ┰──┬──┬──┬──┰──┬──┬──┬──┐
  847.     ┃ '0'│ SON│ TON│ GS4┃ GS3│ GS2│ GS1│ GS0│
  848.     ┸──┴──┴──┴──┸──┴──┴──┴──┘
  849.     SON    0; SP画面非表示        1; SP画面表示
  850.     TON    0; TX画面非表示        1; TX画面表示
  851.     GS4    0; GG画面非表示        1; 実サイズ1024×1024 GG画面表示
  852.     GS3    0; Gplen3 非表示    1; Gplen3 表示
  853.     GS2    0; Gplen2 非表示    1; Gplen2 表示
  854.     GS1    0; Gplen1 非表示    1; Gplen1 表示
  855.     GS0    0; Gplen0 非表示    1; Gplen0 表示
  856.      bit7:があやしい!! 謎の半透明モードになる
  857.  
  858. $EB0808 bit 9    0;SPRITE/BG 表示OFF (ハイアクセス)
  859.         1;SPRITE/BG 表示ON
  860.  
  861.  
  862. -----------------------------------------------------
  863.  
  864.     BITSNS 
  865. │g:a\b│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
  866. ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
  867. │ 0:00│  6&  │  5%  │  4$  │  3#  │  2"  │  1!  │  ESC │未定義│
  868. │ 1:08│  BS  │  \|  │  ^~  │  -=  │  0   │  9)  │  8(  │  7'  │
  869. │ 2:10│  U  │  Y  │  T  │  R  │  E  │  W  │  Q  │  TAB │
  870. │ 3:18│  S  │  A  │ [CR] │  [   │  @`  │  P  │  O  │  I  │
  871. │ 4:20│  ;+  │  L  │  K  │  J  │  H  │  G  │  F  │  D  │
  872. │ 5:28│  N  │  B  │  V  │  C  │  X  │  Z  │   ]  │  :*  │
  873. │ 6:30│  DEL │ HOME │ [SP] │   _  │  /?  │  .>  │  ,<  │  M  │
  874. │ 7:38│  CLR │  ↓  │  →  │  ↑  │  ←  │ UNDO │Rolldn│Rollup│
  875. │ 8:40│  4  │  +  │  9  │  8  │  7  │  -  │  *  │  /  │
  876. │ 9:48│  0  │ ENTER│  3  │  2  │  1  │  =  │  6  │  5  │
  877. │ A:50│  XF3 │  XF2 │  XF1 │ HELP │ 登録 │ 記号 │  .  │  ,  │
  878. │ B:58│ ヒカナ │  INS │ CAPS │コード│ ローマ字│ かな │  XF5 │  XF4 │
  879. │ C:60│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角 │
  880. │ D:68│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6 │
  881. │ E:70│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT│
  882. │ F:78│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義│
  883.  
  884. */
  885.  
  886.